/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package slowotok;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

/**
 *
 * @author PiotrGl
 */
public class TablicaLit {
    private char tablica[][]={{'S', 'L', 'R', 'E'},{'G', 'O', 'W', 'P'},{'K', 'R', 'U', 'O'},{'A', 'O', 'T', 'S'}};
    
    @Override
    public String toString() {
        String ret="";
        for(int i=0; i<4;i++){
            for(int j=0; j<4;j++){
                ret=ret+tablica[i][j]+" ";
                
            }
            ret=ret+"\n";
        }      
        return ret;
    }

    public void setTablica(char[][] tablica) {
        this.tablica = tablica;
    }
    
    public char getLit(Pozycja pos){
        return tablica[pos.x][pos.y];
    }
    
    public List<Pozycja> getNeighbours(Pozycja pos){
        List<Pozycja> pozycje = new ArrayList<Pozycja>();
        
        if (pos.x>0 && pos.y>0) pozycje.add(new Pozycja(pos, -1, -1));
        if (pos.x<3 && pos.y<3) pozycje.add(new Pozycja(pos,  1,  1));
        if (pos.x>0 && pos.y<3) pozycje.add(new Pozycja(pos, -1,  1));
        if (pos.x<3 && pos.y>0) pozycje.add(new Pozycja(pos,  1, -1));
        if (pos.y>0)            pozycje.add(new Pozycja(pos,  0, -1));
        if (pos.x>0)            pozycje.add(new Pozycja(pos, -1,  0));
        if (pos.y<3)            pozycje.add(new Pozycja(pos,  0,  1));
        if (pos.x<3)            pozycje.add(new Pozycja(pos,  1,  0));
        
        return pozycje;
    }
    
    public List<Pozycja> getNeighbours(List<Pozycja> pozy){
        List<Pozycja> pozycje = new ArrayList<Pozycja>();
        Pozycja pos = pozy.get(pozy.size()-1);
        if (pos.x>0 && pos.y>0 && !zawiera(pozy, new Pozycja(pos, -1, -1))) pozycje.add(new Pozycja(pos, -1, -1));
        if (pos.x<3 && pos.y<3 && !zawiera(pozy, new Pozycja(pos,  1,  1))) pozycje.add(new Pozycja(pos,  1,  1));
        if (pos.x>0 && pos.y<3 && !zawiera(pozy, new Pozycja(pos, -1,  1))) pozycje.add(new Pozycja(pos, -1,  1));
        if (pos.x<3 && pos.y>0 && !zawiera(pozy, new Pozycja(pos,  1, -1))) pozycje.add(new Pozycja(pos,  1, -1));
        if (pos.y>0 && !zawiera(pozy, new Pozycja(pos,  0, -1)))            pozycje.add(new Pozycja(pos,  0, -1));
        if (pos.x>0 && !zawiera(pozy, new Pozycja(pos, -1,  0)))            pozycje.add(new Pozycja(pos, -1,  0));
        if (pos.y<3 && !zawiera(pozy, new Pozycja(pos,  0,  1)))            pozycje.add(new Pozycja(pos,  0,  1));
        if (pos.x<3 && !zawiera(pozy, new Pozycja(pos,  1,  0)))            pozycje.add(new Pozycja(pos,  1,  0));
        
        return pozycje;
    }
    
    public String getWord(List<Pozycja> pozycje){
        String  word = "";
        for (Pozycja posd : pozycje) {
            word=word+getLit(posd);
        }
        return word;
    }
    
    private boolean zawiera(List<Pozycja> pozycje, Pozycja pos){
        for (Pozycja poz: pozycje){
            if(poz.equals(pos)){
                return true;
            }
        }
        return false;
    }
            
}
